package com.tanavlog.common.service.impl;

import com.tanavlog.common.enums.ResultCodeEnum;
import com.tanavlog.common.exception.BizException;
import com.tanavlog.common.service.MailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.mail.MailProperties;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;


/**
 * @author 枫花恋
 * @description 默认邮件服务实现类
 * @since 2025/7/25 00:25
 */
@Slf4j
@Service
public class DefaultMailService implements MailService {

    @Autowired  // 自动注入 Spring 配置好的邮件发送器
    private JavaMailSender javaMailSender;

    @Autowired  // 自动注入邮件配置属性，如发件人邮箱、主机名等
    private MailProperties mailProperties;

    /**
     * 发送简单文本邮件（异步执行）
     *
     * @param to 接收人邮箱地址
     * @param subject 邮件主题
     * @param content 邮件正文内容
     */
    @Override
    @Async  // 异步执行该方法，调用方不会阻塞等待发送完成
    public void sendSimpleMail(String to, String subject, String content) {
        // 构建一个简单邮件对象
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(mailProperties.getUsername());  // 设置发件人（从配置中获取）
        simpleMailMessage.setTo(to);  // 设置收件人
        simpleMailMessage.setSubject(subject);  // 设置邮件标题
        simpleMailMessage.setText(content);  // 设置邮件内容

        try {
            // 发送邮件
            javaMailSender.send(simpleMailMessage);
            log.info("邮件发送成功：收件人={}, 主题={}", to, subject);
        } catch (MailException e) {
            // 捕获并记录发送异常，同时抛出业务异常
            log.error("邮件发送失败：收件人={}, 主题={}", to, subject, e);
        }
    }
}

